Traductores e Intérpretes UCAB : Conjuntos, Lenguajes, y Expresiones Regulares
This page last changed on Oct 08, 2006 by juanca.
Conjunto RegularDado un Alfabeto Σ, definimos un conjunto regular sobre el mismo de la siguiente manera:
Lenguaje RegularUn Lenguaje L ⊆ Σ* es regular si y solo si es un Conjunto Regular. Es decir, si L es:
o puede obtenerse de loas anteriores mediante un número finito de operaciónes de unión, concatenación, y Clausura. Expresión RegularUna expresión regular sobre un Alfabeto Σ es una manera conveniente de denotar un Conjunto Regular sobre dicho Alfabeto. Una expresión regular se define de la siguiente manera:
Por conveniencia definimos:
Precedencia en Expresiones RegularesPodemos eliminar los paréntesis en una expresión regular cuando ello no produzca ambiguedad si definimos que la precedencia de los operadores es la siguiente:
En aplicaciones prácticas, puede usarse el símbolo + en lugar de | en las expresiones regulares. Ejemplos
Propiedades Algebraicas de las Expresiones RegularesSi p, q, y r son expresiones regulares, entonces:
ConcordanciaUna Cadena concuerda con una Expresion Regular si dicha Cadena pertenece al Conjunto Regular denotado por la expresión. La Cadena:
concuerda con la expresión regular:
Una Expresion Regular concuerda con el conjunto de cadenas en el Conjunto Regular que denota. La expresión regular:
concuerda con el conjunto:
Expresiones Regulares en la Vida RealLas Expresiones Regulares se usan en diversas áreas distintas a la de los compiladores. Por ejemplo, los editores de texto y los Ambientes Integrados de Desarrollo de software suelen incluir facilidades con Expresiones Regulares para la búsqueda y sustitución de texto. Existen también librerías de manejo de Expresiones Regulares para la mayoría de los lenguajes de programación, y hay lenguajes como Perl y AWK, cuyo diseño gira en torno a las Expresiones Regulares. ExtensionesLas implementaciones de Expresiones Regulares normalmente proveen cambios en la notación y extensiones que hacen más fácil escribir una Expresion Regular. A continuación se describen algunas de las modificaciones y extensiones más frecuentes. El alfabeto subyacente en todos los casos es:
. El punto (any)El símbolo . concuerda con cualquier símbolo del alfabeto subyacente. Por ejemplo, la expresión regular:
concuerda con las cadenas (produce el Conjunto Regular):
Para lograr la Concordancia con un punto, hay que preceder el punto de una barra invertida (backslash).
concuerda únicamente con la cadena:
El símbolo de barra invertida se usa en las Expresiones Regulares como símbolo de escape, es decir para cambiar el significado del siguiente símbolo de especial a normal, o viceversa. La siguiente Expresion Regular:
concuerda con muchas más cadenas que "3.1416". Para hacer que la expresión solo concuerde con esa aproximación del número PI, hay que escribirla así:
Formalmente, el símbolo "." corresponde a la Expresion Regular:
* y + para Clausura y Clausura positiva
Para lograr la concordancia con * o + es necesario usar el símbolo de escape. ? Para cero o una vezEl símbolo ? hace que la Expresion Regular anterior concuerde cero veces o una vez. Por ejemplo, la Expresion Regular:
concuerda con:
Al igual que con el punto, para lograr Concordancia con un signo de interrogación, hay que usar el símbolo de escape y escribir: \? Formalmente:
{n,m} Para de n a m vecesUna expresión de la forma
concuerda p con las cadenas que contengan entre n y m concatenaciones de p. Por ejemplo, la Expresion Regular:
concuerda con:
Formalmente:
[ ] Para conjuntos de caracteresLas expresiones en corchetes [ ] contienen listas de símbolos separadas por comas, y concuerdan con cualquiera de esos s?mbolos. Por ejemplo, la e.r.:
concuerda con:
únicamente. También pueden usarse rangos de símbolos separándolos con un quión:
una Expresion Regular así concuerda con cualquiera de los símbolos entre la 'a' y la 'z' según el orden lexicográfico del alfabeto subyacente. Como la mayoría de los órdenes lexicográficos tienen a las letras mayúsculas, las minúsculas, y los dígitos en el orden esperado, las expresiones con corchetes resultan muy útiles. Por ejemplo, los identificadores válidos en el lenguaje de programación Pascal, concuerdan con esta Expresion Regular:
Para incluir un guión entre los símbolos a concordar en una expresión en corchetes, se lo puede incluir de primero o último:
concuerda con:
[^ ] Inversos de ConjuntosSi el primer símbolo despu?s del corchete de apertura es uno de acento circunflejo (caret), entonces la expresión concuerda con lo contrario a lo que concordaría sin dicho símbolo:
concuerda con cualquier símbolo que no sea una letra minúscula. ^ y $, comienzo y fin de la secuenciaEl símbolo ^ concuerda con el inicio de la secuencia (o con el inicio de la línea de texto de entrada, dependiendo del software y su configuración), y el símbolo $ concuerda con el final de una secuancia (o con el final de la línea).
concuerda con las secuencias vacías (el conjunto {ε}). La expresión:
concuerda con las líneas que comienzan por uno o más blancos. Secuencias de EscapeMuchos lenguajes de expresiones regulares, como el incluido en el lenguaje de programación Perl, definen una serie de muy útiles secuencias de escape:
() para agrupar y másEn muchas librerías de Expresiones Regulares, los paréntesis tienen un significado adicional al de las Expresiones Regulares formales. Los paréntesis hacen que el intérprete de Expresiones Regulares recuerde la secuencia que concordó con la sub-expresión y permita usarla en otras sub-expresiones, o en sustituciones. Uno de los usos más frecuentes de los paréntesis es tratar de concordar la misma secuencia dos veces. Usualmente, se representa con \n a la cadena concordada por la sub-expresión entre paréntesis n. Por ejemplo, la expresión:
trata de encontrar las asignaciones de pascal en las que el identificador asignado aparezca en en el lado derecho. Otro uso frecuente de las sub-expresiones delimitadas por paréntesis es en la búsqueda y substitución. En esos casos, suele representarse por $n la cadena concordada por la sub-expresión entre paréntesis n. Por ejemplo, podríamos usar la siguiente Expresion Regular para intercambiar el orden de los elementos en una tabla: reemplazar(entrada, '(\\w*)\\s*,\\s*(\\w+);', '$2, $1;'); Definición RegularLas Expresiones Regulares son una manera conveniente de describir los patrones asociados a los Componentes Lexicos, sobre todo cuando existen métodos muy eficientes de hacer análisis léxico usando expresiones regulares. Por ello la mayoría de los analizadores léxicos y las herramientas que los producen usan Expresiones Regulares para describir los Componentes Lexicos. Dada una relación de orden total sobre los símbolos del alfabeto en cuestión, podemos usar la abreviación:
para referirnos a la expresión regular:
Entoces, podemos escribir definiciones de Componentes Lexicos así:
Una definición como la anterior se llama una definición regular. Definir el conjunto de Componentes Lexicos de un lenguaje de programación usando una definición regular es algo muy usual. |
Document generated by Confluence on Oct 04, 2010 11:25 |